home *** CD-ROM | disk | FTP | other *** search
/ Apple WWDC 1996 / WWDC96_1996 (CD).toast / Technology Materials / QuickTime VR / MacOS / QuickDraw™ 3D 1.0.6F4 SDK / Development / Interfaces / QD3DPick.h < prev    next >
Encoding:
C/C++ Source or Header  |  1995-11-14  |  7.1 KB  |  270 lines  |  [TEXT/MPS ]

  1. /******************************************************************************
  2.  **                                                                             **
  3.  **     Module:        QD3DPick.h                                                 **
  4.  **                                                                          **
  5.  **                                                                          **
  6.  **     Purpose:     Public picking routines                                  **
  7.  **                                                                          **
  8.  **                                                                          **
  9.  **                                                                          **
  10.  **     Copyright (C) 1992-1994 Apple Computer, Inc.  All rights reserved.     **
  11.  **                                                                          **
  12.  **                                                                          **
  13.  *****************************************************************************/
  14. #ifndef QD3DPick_h
  15. #define QD3DPick_h
  16.  
  17. #ifndef QD3D_h
  18. #include <QD3D.h>
  19. #endif  /*  QD3D_h  */
  20.  
  21. #if PRAGMA_ONCE
  22.     #pragma once
  23. #endif
  24.  
  25. #if defined(__MWERKS__)
  26.     #pragma enumsalwaysint on
  27.     #pragma align_array_members off
  28.     #pragma options align=native
  29. #endif
  30.  
  31. #include <QD3DStyle.h>
  32. #include <QD3DGeometry.h>
  33.  
  34. #ifdef __cplusplus
  35. extern "C" {
  36. #endif  /*  __cplusplus  */
  37.  
  38.  
  39. /*****************************************************************************
  40.  **                                                                            **
  41.  **                            Mask bits for hit information                     **
  42.  **                                                                            **
  43.  *****************************************************************************/
  44.  
  45. typedef enum TQ3PickDetailMasks {
  46.     kQ3PickDetailNone                    = 0,
  47.     kQ3PickDetailMaskPickID             = 1 << 0,
  48.     kQ3PickDetailMaskPath                 = 1 << 1,
  49.     kQ3PickDetailMaskObject             = 1 << 2,
  50.     kQ3PickDetailMaskLocalToWorldMatrix    = 1 << 3,
  51.     kQ3PickDetailMaskXYZ                 = 1 << 4,
  52.     kQ3PickDetailMaskDistance             = 1 << 5,
  53.     kQ3PickDetailMaskNormal             = 1 << 6,
  54.     kQ3PickDetailMaskShapePart             = 1 << 7
  55. } TQ3PickDetailMasks;
  56.  
  57. typedef unsigned long TQ3PickDetail;
  58.  
  59.  
  60. /******************************************************************************
  61.  **                                                                             **
  62.  **                                Hitlist sorting                                 **
  63.  **                                                                             **
  64.  *****************************************************************************/
  65.  
  66. typedef enum TQ3PickSort {
  67.     kQ3PickSortNone,
  68.     kQ3PickSortNearToFar,
  69.     kQ3PickSortFarToNear
  70. } TQ3PickSort;
  71.  
  72.  
  73. /******************************************************************************
  74.  **                                                                             **
  75.  **                    Data structures to set up the pick object                 **
  76.  **                                                                             **
  77.  *****************************************************************************/
  78.  
  79. #define kQ3ReturnAllHits        0
  80.  
  81. typedef struct TQ3PickData {
  82.     TQ3PickSort            sort;
  83.     TQ3PickDetail        mask;
  84.     unsigned long        numHitsToReturn;
  85. } TQ3PickData;
  86.  
  87. typedef struct TQ3WindowPointPickData {
  88.     TQ3PickData            data;
  89.     TQ3Point2D            point;
  90.     float                vertexTolerance;
  91.     float                edgeTolerance;
  92. } TQ3WindowPointPickData;
  93.  
  94. typedef struct TQ3WindowRectPickData {
  95.     TQ3PickData            data;
  96.     TQ3Area                rect;
  97. } TQ3WindowRectPickData;
  98.  
  99.  
  100. /******************************************************************************
  101.  **                                                                             **
  102.  **                                    Hit data                                 **
  103.  **                                                                             **
  104.  *****************************************************************************/
  105.  
  106. typedef struct TQ3HitPath {
  107.     TQ3GroupObject            rootGroup;
  108.     unsigned long             depth;
  109.     TQ3GroupPosition        *positions;
  110. } TQ3HitPath;
  111.  
  112. typedef struct TQ3HitData {
  113.     TQ3PickParts            part;
  114.     TQ3PickDetail            validMask;
  115.     unsigned long             pickID;
  116.     TQ3HitPath                path;
  117.     TQ3Object                object;
  118.     TQ3Matrix4x4            localToWorldMatrix;
  119.     TQ3Point3D                xyzPoint;
  120.     float                    distance;
  121.     TQ3Vector3D                normal;
  122.     TQ3ShapePartObject        shapePart;
  123. } TQ3HitData;
  124.  
  125.  
  126. /******************************************************************************
  127.  **                                                                             **
  128.  **                                Pick class methods                             **
  129.  **                                                                             **
  130.  *****************************************************************************/
  131.  
  132. QD3D_EXPORT TQ3ObjectType Q3Pick_GetType(
  133.     TQ3PickObject        pick);
  134.  
  135. QD3D_EXPORT TQ3Status Q3Pick_GetData(
  136.     TQ3PickObject        pick,
  137.     TQ3PickData            *data);
  138.  
  139. QD3D_EXPORT TQ3Status Q3Pick_SetData(
  140.     TQ3PickObject        pick,
  141.     const TQ3PickData    *data);
  142.     
  143. QD3D_EXPORT TQ3Status Q3Pick_GetVertexTolerance(
  144.     TQ3PickObject        pick,
  145.     float                *vertexTolerance);
  146.     
  147. QD3D_EXPORT TQ3Status Q3Pick_GetEdgeTolerance(
  148.     TQ3PickObject        pick,
  149.     float                *edgeTolerance);
  150.     
  151. QD3D_EXPORT TQ3Status Q3Pick_SetVertexTolerance(
  152.     TQ3PickObject        pick,
  153.     float                vertexTolerance);
  154.     
  155. QD3D_EXPORT TQ3Status Q3Pick_SetEdgeTolerance(
  156.     TQ3PickObject        pick,
  157.     float                edgeTolerance);
  158.  
  159. QD3D_EXPORT TQ3Status Q3Pick_GetNumHits(
  160.     TQ3PickObject        pick,
  161.     unsigned long        *numHits);
  162.     
  163. QD3D_EXPORT TQ3Status Q3Pick_GetHitData(
  164.     TQ3PickObject        pick,
  165.     unsigned long        index,
  166.     TQ3HitData            *hitData);
  167.  
  168. QD3D_EXPORT TQ3Status Q3Hit_EmptyData(
  169.     TQ3HitData            *hitData);
  170.  
  171. QD3D_EXPORT TQ3Status Q3Pick_EmptyHitList(
  172.     TQ3PickObject        pick);
  173.  
  174.     
  175. /******************************************************************************
  176.  **                                                                             **
  177.  **                            Window point pick methods                         **
  178.  **                                                                             **
  179.  *****************************************************************************/
  180.  
  181. QD3D_EXPORT TQ3PickObject Q3WindowPointPick_New(
  182.     const TQ3WindowPointPickData    *data);
  183.  
  184. QD3D_EXPORT TQ3Status Q3WindowPointPick_GetPoint(
  185.     TQ3PickObject                    pick,
  186.     TQ3Point2D                        *point);
  187.  
  188. QD3D_EXPORT TQ3Status Q3WindowPointPick_SetPoint(
  189.     TQ3PickObject                    pick,
  190.     const TQ3Point2D                *point);
  191.  
  192. QD3D_EXPORT TQ3Status Q3WindowPointPick_GetData(
  193.     TQ3PickObject                    pick,
  194.     TQ3WindowPointPickData            *data);
  195.  
  196. QD3D_EXPORT TQ3Status Q3WindowPointPick_SetData(
  197.     TQ3PickObject                    pick,
  198.     const TQ3WindowPointPickData    *data);
  199.  
  200.  
  201. /******************************************************************************
  202.  **                                                                             **
  203.  **                            Window rect pick methods                         **
  204.  **                                                                             **
  205.  *****************************************************************************/
  206.  
  207. QD3D_EXPORT TQ3PickObject Q3WindowRectPick_New(
  208.     const TQ3WindowRectPickData    *data);
  209.  
  210. QD3D_EXPORT TQ3Status Q3WindowRectPick_GetRect(
  211.     TQ3PickObject                pick,
  212.     TQ3Area                        *rect);
  213.  
  214. QD3D_EXPORT TQ3Status Q3WindowRectPick_SetRect(
  215.     TQ3PickObject                pick,
  216.     const TQ3Area                *rect);
  217.  
  218. QD3D_EXPORT TQ3Status Q3WindowRectPick_GetData(
  219.     TQ3PickObject                pick,
  220.     TQ3WindowRectPickData        *data);
  221.  
  222. QD3D_EXPORT TQ3Status Q3WindowRectPick_SetData(
  223.     TQ3PickObject                pick,
  224.     const TQ3WindowRectPickData    *data);
  225.  
  226.  
  227.  
  228. /******************************************************************************
  229.  **                                                                             **
  230.  **                                Shape Part methods                             **
  231.  **                                                                             **
  232.  *****************************************************************************/
  233.  
  234. QD3D_EXPORT TQ3ObjectType Q3ShapePart_GetType(
  235.     TQ3ShapePartObject            shapePartObject);
  236.  
  237. QD3D_EXPORT TQ3ObjectType Q3MeshPart_GetType(
  238.     TQ3MeshPartObject            meshPartObject);
  239.  
  240. QD3D_EXPORT TQ3Status Q3ShapePart_GetShape(
  241.     TQ3ShapePartObject            shapePartObject,
  242.     TQ3ShapeObject                *shapeObject);
  243.  
  244. QD3D_EXPORT TQ3Status Q3MeshPart_GetComponent(
  245.     TQ3MeshPartObject            meshPartObject,
  246.     TQ3MeshComponent            *component);
  247.  
  248. QD3D_EXPORT TQ3Status Q3MeshFacePart_GetFace(
  249.     TQ3MeshFacePartObject        meshFacePartObject,
  250.     TQ3MeshFace                    *face);
  251.  
  252. QD3D_EXPORT TQ3Status Q3MeshEdgePart_GetEdge(
  253.     TQ3MeshEdgePartObject        meshEdgePartObject,
  254.     TQ3MeshEdge                    *edge);
  255.  
  256. QD3D_EXPORT TQ3Status Q3MeshVertexPart_GetVertex(
  257.     TQ3MeshVertexPartObject        meshVertexPartObject,
  258.     TQ3MeshVertex                *vertex);
  259.  
  260. #ifdef __cplusplus
  261. }
  262. #endif  /*  __cplusplus  */
  263.  
  264. #if defined(__MWERKS__)
  265. #pragma options align=reset
  266. #pragma enumsalwaysint reset
  267. #endif
  268.  
  269. #endif  /*  QD3DPick_h  */
  270.